Очень хороший атрибут, который используется совместно с директивами препроцессора. Смотрим пример:
using System;
using System.Diagnostics;
class MyTrace
{
[Conditional("DEBUG")]
public void Print()
{
Console.WriteLine("Print");
}
}
class MainClass
{
public static void Main(string[] args)
{
MyTrace m = new MyTrace();
m.Print();
}
}
Если компиляция будет производиться с определением DEBUG, то функция Print будет существовать и вызываться.

А вот есть нет, то компилятор сделает вид, что она ну существует, и не ее реализации, не ее вызова в конечной программе не будет. Обратите внимание что и вызов это функции то же удалиться и это не приведет к ошибке времени выполнения.